package insigin;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Files;
import java.sql.Array;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;

/**
 * @author huu
 * @create 2025-08-24-9:58
 */
public class UserFile implements Iterable<User> {
    private File file;
    public UserFile(File file) {
        this.file = file;
    }

    @Override
    public Iterator<User> iterator() {
        return new UserFileIterator();
    }

    class UserFileIterator implements Iterator<User> {
        //List<User> list = readFromFile( file);
//        private int index = 0;//游标

//        一次性读取
//        private List<User> readFromFile(File file) {
//            try {
//                return Files.readAllLines(file.toPath()).stream().map(line -> {
//                    // 去除行首和行尾的方括号
//                    String  midString = line.substring(1, line.length() - 1);
//                    // 按逗号分割
//                    String[] split = midString.split(",");
//                    // 去除可能存在的空格并解析数据
//                    String name = split[0];
//                    int age = Integer.parseInt(split[1]); // 去除空格后解析年龄
//                    return new User(name, age);
//                }).collect(Collectors.toList());
//            } catch (IOException e) {
//                e.printStackTrace();
//                return new ArrayList<>();
//            }
//        }
        private BufferedReader reader;// 文件读取器
        private User nextUser;        // 下一个要返回的用户对象
        private boolean finished;     // 是否已经处理完所有数据

        // 构造函数
        public UserFileIterator() {
            try {
                // 初始化文件读取器
                reader = new BufferedReader(new FileReader(file));
                // 预加载第一个用户数据
                loadNextUser();
            } catch (IOException e) {
                e.printStackTrace();
                finished = true;
            }
        }

        // 加载下一个用户数据的方法
        private void loadNextUser() {
            try {
                String line;
                do {
                    // 读取文件的下一行
                    line = reader.readLine();
                    if (line == null) {
                        finished = true;
                        reader.close();
                        return;
                    }

                    // 处理读取到的行
                    if (!line.trim().isEmpty()) {
                        // 去除行首和行尾的方括号
                        String midString = line.substring(1, line.length() - 1);
                        // 按逗号分割
                        String[] split = midString.split(",");
                        // 去除可能存在的空格并解析数据
                        String name = split[0].trim().replaceAll("\"", ""); // 去除引号和空格
                        int age = Integer.parseInt(split[1].trim().replaceAll("\\]", "")); // 去除可能的右方括号并解析年龄
                        nextUser = new User(name, age);
                        return; // 找到有效数据，返回
                    }
                } while (line != null);

                // 没有更多数据
                finished = true;
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
                finished = true;
                try {
                    reader.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }

        @Override
        public boolean hasNext() {
            //return index < list.size();
            return !finished;
        }

        @Override
        public User next() {
//            if(index > list.size()) throw new NoSuchElementException();
//            int currentIndex =  index;
//            index++;
//            return list.get(currentIndex);
            if (finished) throw new NoSuchElementException();

            User currentUser = nextUser;
            loadNextUser();
            return currentUser;
        }

        @Override
        public void remove() {
            //按理来说默认实现不需要实现的，我们这就直接抛一个异常吧
            throw new UnsupportedOperationException("Remove operation is not supported");
        }
    }
}
